package cn.itcast.ssh.service;

import java.io.File;
import java.io.InputStream;
import java.util.List;
import java.util.Map;

import org.activiti.engine.repository.Deployment;
import org.activiti.engine.repository.ProcessDefinition;
import org.activiti.engine.task.Comment;
import org.activiti.engine.task.Task;

import cn.itcast.ssh.domain.LeaveBill;
import cn.itcast.ssh.web.form.WorkflowBean;

public interface IWorkflowService {

	/**
	 * 利用页面传递的zip文件完成部署
	 * @param file
	 * @param filename
	 */
	public void saveNewDeploye(File file, String filename);

	/**
	 * 查询流程部署集合
	 * @return
	 */
	public List<Deployment> findDeploymentList();

	/**
	 * 查询流程定义集合
	 * @return
	 */
	public List<ProcessDefinition> findProcessDefinitionList();

	/**
	 * 根据部署ID和图片名称,获取对应的输入流inputStream
	 * @param deploymentId
	 * @param imageName
	 * @return
	 */
	public InputStream findImageInputStream(String deploymentId, String imageName);

	/**
	 * 使用部署ID,删除流程部署
	 * @param deploymentId
	 */
	public void deleteProcessDefinitionByDeploymentId(String deploymentId);
	
	/**
	 * 更新请假状态,启动流程实例,让启动的流程实例关联业务
	 * @param workflowBean
	 */
	public void saveStartProcess(WorkflowBean workflowBean);

	/**
	 *  获取指定用户正在执行的任务列表
	 * @param name
	 * @return
	 */
	public List<Task> findTaskListByName(String name);

	/**
	 * 使用任务ID,获取当前任务节点中对应的form key中的连接的值
	 * @param taskId
	 * @return
	 */
	public String findTaskFormKeyByTaskId(String taskId);

	/** 
	  * 使用任务ID,查找请假单ID,从而获取请假单信息
	 * @param taskId
	 * @return
	 */
	public LeaveBill findLeaveBillByTaskId(String taskId);

	/**
	 * 根据任务ID,查询processDefinitionEntity对象,从而获取当前任务完成之后的连线sequenceFlow名称,并防止到List<String> 集合中
	 * @param taskId
	 * @return
	 */
	public List<String> findOutcomeListByTaskId(String taskId);

	/**
	 * 指定名称的连线完成任务
	 * @param workflowBean
	 */
	public void saveSubmitTask(WorkflowBean workflowBean);

	/**
	 * 获取批准信息,传递的是当前的任务ID,获取对应的历史任务ID的批注
	 * @param taskId
	 * @return
	 */
	public List<Comment> findCommentByTaskId(String taskId);

	/**
	 * .使用请假单ID,查询历史批注信息
	 * @param id
	 * @return
	 */
	public List<Comment> findCommentByLeaveBillId(Long id);

	/**
	 * 根据任务对象,获取流程定义对象
	 * @param taskId
	 * @return
	 */
	public ProcessDefinition findProcessDefinitionByTaskId(String taskId);

	/**
	 * 根据任务ID,获取活动节点的各个坐标
	 * @param taskId
	 * @return
	 */
	public Map<String, Object> findCoordingByTask(String taskId);
	
	/**
	 * 强制终止流程
	 * @param taskId
	 */
	public void endProcess(WorkflowBean workflowBean) throws Exception;

}
